[Auth0] メールアドレスからユーザ情報を取得する(Management API)
メールアドレスを使って、Auth0のユーザ情報を取得してみます。 URLエンコードが必要な部分が、ハマリポイントです。
メールアドレスを使って、Auth0のユーザ情報を取得してみます。想定のユースケースは以下です。
- ユーザ登録済みか? を確認したい
- メールアドレスからユーザIDを取得したい
おすすめの方
- Auth0のManagement APIを使いたい方
- Auth0のManagement APIで「Search Users by Email」を使いたい方
Auth0テナントを準備する
Auth0テナントを作成する
適当にAuth0テナントを作成します。既存のAuth0テナントでもOKです。
E2Eアプリケーションを作成する
E2Eアプリケーションを作製します。既存のE2EアプリケーションでもOKです。read:users
の権限が必要です。
メールアドレスからユーザ情報を取得する
次のサンプルコードを使います。
Pythonのサンプルコード
メールアドレスのURLエンコードを忘れずに行います。
また、メールアドレスは次のように扱われます。詳細は公式ドキュメントを参照してください。
- Auth0がidPのとき: メールアドレスは、すべて小文字
- Auth0がidPでない: メールアドレスは、idPのルールに従う
import json import urllib.parse import requests CLIENT_ID = 'your client id' CLIENT_SECRET = 'your client secret' AUDIENCE = 'your audience' ENDPOINT = 'your endpoint' TARGET_EMAIL = 'sample+test@example.com' def main(): access_token = get_access_token() user_id = get_user_id_by_email(access_token, TARGET_EMAIL) print(user_id) def get_access_token() -> str: headers = {'content-type': 'application/json'} payload = { 'client_id': CLIENT_ID, 'client_secret': CLIENT_SECRET, 'audience': AUDIENCE, 'grant_type': 'client_credentials', } resp = requests.post(f'{ENDPOINT}/oauth/token', headers=headers, data=json.dumps(payload)) return resp.json()['access_token'] def get_user_id_by_email(access_token: str, email: str) -> str: headers = { 'Authorization': f'Bearer {access_token}'} # URLエンコードをする email_quote = urllib.parse.quote(email) # fieldsの指定を変更すれば、ユーザID以外も取得可能 # https://auth0.com/docs/api/management/v2#!/Users_By_Email/get_users_by_email resp = requests.get(f'{AUDIENCE}users-by-email?email={email_quote}&fields=user_id', headers=headers) return resp.json()[0]['user_id'] if __name__=='__main__': main()
URLエンコードによって、メールアドレスが次のようになります。
- before: sample+test@example.com
- after: sample%2Btest%40example.com
実行!
無事に取得できました。
$ python sample.py auth0|xxxyyyzzz